import torch
from torch import nn
from d2l.torch import d2l
import matplotlib.pyplot as plt
# 加载数据集
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

# 初始化模型和参数
# pytorch不会隐式的调整输入形状，因此在线性层前定义一个展平层Flatten()进行调整
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
def init_weight(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)
net.apply(init_weight)

# 定义损失函数
loss = nn.CrossEntropyLoss(reduction='none') # reducti默认为mean，此时会进行降维，输出的是一个标量
trainer = torch.optim.SGD(net.parameters(), lr=0.1)

# 训练模型，使用预定好的函数
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
d2l.plt.show()
